package keyword;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * CAS解析
 * 1.CAS是在多线程环境下实现同步的机制，包括三个值，内存位置，预期值，新值
 * @author <a href="mailto:sjj@jianzhimao.com">mojo</a>
 * copyright (C), 2013-2022, 广州九尾信息科技有限公司
 * @date 2022/2/11 10:47
 */
public class CASDemo {
    AtomicInteger n = new AtomicInteger(0);

    public int increase() {
        //使用原子工具类，保证并发下的原子操作
        //CAS存在问题

        //1、循环时间长，消耗大
        //2、只能保证一个共享变量的原子操作
        //3、ABA问题
        //代码：getIntVolatile方法获取值，compareAndSwapInt方法比较并交换
        return n.getAndIncrement();
    }

    public static void main(String[] args) {
        CASDemo demo = new CASDemo();

        for (int i = 1; i <= 3; i++) {
            new Thread(() -> {
                for (int i1 = 0; i1 < 1000; i1++) {
                    demo.increase();
                }
            }).start();
        }
        while (Thread.activeCount() > 1) {
            Thread.yield();
        }
        System.out.println(demo.n);

    }
}
